package controle;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Lindemberg
 */
public class Functions {

    public double periodo;
    public double periodoAleatorio;

    public void Functions(double _periodo) {
        this.periodo = _periodo;
    }

    /**
     * Função degrau com amplitude amp
     * @param amp amplitude do sinal (degrau unitario amp = 1)
     * @param t   tempo
     * @return    função degrau
     */
    public double Degrau(double amp, double t, double off) {
        return (t < 0) ? (0+off) : (amp+off);
    }

    /**
     * Função senóide com período this.periodo
     * @param t tempo
     * @return  função senóide
     */
    public double Senoide(double amp, double t, double off) {
        //return 1+Math.sin((2 * Math.PI) / this.periodo);
        return (amp * Math.sin(2 * Math.PI * t / periodo))+amp;
        //return ((off/2)*Math.sin(amp / (periodo/ (2 * Math.PI))) + off/2);
    }
    
    public double Senoide2(double amp, double t, double off) {
        //return 1+Math.sin((2 * Math.PI) / this.periodo);
        //return (amp * Math.sin(2 * Math.PI * t / periodo))+off;
        return ((off/2)*Math.sin(amp / (periodo/ (2 * Math.PI))) + off/2);
    }

    /**
     * Função quadrada com amplitude amp e período this.periodo
     * @param amp amplitude do sinal
     * @param t   tempo
     * @return    função quadrada
     */
    public double Quadrada(double amp, double t, double off) {

        int inteiro = (int) (t / (this.periodo / 2));
        return (inteiro % 2) == 0 ? (amp+off) : (-amp+off);
    }

    /**
     * Função dente de serra com período this.período
     * @param t tempo
     * @return  função dente de serra
     */
    public double DenteSerra(double amp, double t, double off) {
        //return amp * (t % this.periodo);
        //return (amp * t) % periodo;
        return (2* amp * (t - Math.floor(t)))+off;
    }

    public double Aleatorio(double amp, double off) {
        return (2 * amp * Math.random())+off;
    }
    
    public double Aleatorio2(double t) {
        double amp = Math.random()*3;
        int inteiro = (int) (t / (this.periodoAleatorio));
        return (inteiro % 2) == 0 ? amp : -amp;
    }
    
    public void periodoAleatorio(){
        this.periodoAleatorio = Math.random()*100;
    }
}
